package base_grammar

import "fmt"

type Person7 struct {
	name string
}

/*
	go语言方法的注意事项
方法的receiver type并非一定要是struct类型，type定义的类型别名、slice、map、channel、func类型等都可以。
struct结合它的方法就等价于面向对象中的类。只不过struct可以和它的方法分开，并非一定要属于同一个文件，但必须属于同一个包。
方法有两种接收类型：(T Type)和(T *Type)，它们之间有区别。
方法就是函数，所以Go中没有方法重载(overload)的说法，也就是说同一个类型中的所有方法名必须都唯一。
如果receiver是一个指针类型，则会自动解除引用。
方法和type是分开的，意味着实例的行为(behavior)和数据存储(field)是分开的，但是它们通过receiver建立起关联关系。
*/
/*
	Go中的方法，是一种特殊的函数，定义于struct之上(与struct关联、绑定)，被称为struct的接受者(receiver)。
	通俗的讲，方法就是有接收者的函数。
*/
func (person Person7) eat() {
	fmt.Println(person.name + " eating")
}

func (person Person7) sleep() {
	fmt.Println(person.name + " sleeping")
}

func struct_f7() {

	var tom = Person7{"tom"}
	tom.eat()
	tom.sleep()
}
